import Foundation

enum Headers: String {
    // http headers
    case host = "Host"
    case authorization = "Authorization"
    case contentType = "Content-Type"
    case contentMD5 = "Content-MD5"
    case contentLength = "Content-Length"
    case date = "Date"
    case range = "Range"
    case cacheControl = "Cache-Control"
    case contentDisposition = "Content-Disposition"
    case contentEncoding = "Content-Encoding"
    case etag = "Etag"
    case expires = "Expires"
    case userAgent = "User-Agent"
    case lastModified = "Last-Modified"
    case responseCacheControl = "response-cache-control"
    case responseContentDisposition = "response-content-disposition"
    case responseContentEncoding = "response-content-encoding"
    case responseContentLanguage = "response-content-language"
    case responseContentType = "response-content-type"
    case responseExpires = "response-expires"
    case ifModifiedSince = "If-Modified-Since"
    case ifUnmodifiedSince = "If-Unmodified-Since"
    case ifMatch = "If-Match"
    case ifNoneMatch = "If-None-Match"
    case append
    case position
    case encryptionKey = "x-oss-meta-client-side-encryption-key"
    case encryptionStart = "x-oss-meta-client-side-encryption-start"
    case cryptoCEKAlg = "x-oss-meta-client-side-encryption-cek-alg"
    case cryptoWrapAlg = "x-oss-meta-client-side-encryption-wrap-alg"
    case cryptoMatdesc = "x-oss-meta-client-side-encryption-matdesc"
    case cryptoDataSize = "x-oss-meta-client-side-encryption-data-size"
    case cryptoPartSize = "x-oss-meta-client-side-encryption-part-size"
    case cryptoUnencryptedContentLength = "x-oss-meta-client-side-encryption-unencrypted-content-length"
    case cryptoContentMD5 = "x-oss-meta-client-side-encryption-unencrypted-content-md5"

    // oss headers
    case securityToken = "x-oss-security-token"
    case hashSha1 = "x-oss-hash-sha1"
    case requestId = "x-oss-request-id"
    case acl = "x-oss-acl"
    case objectAcl = "x-oss-object-acl"
    case storageClass = "x-oss-storage-class"
    case serverSideEncryption = "x-oss-server-side-encryption"
    case serverSideDataEncryption = "x-oss-server-side-data-encryption"
    case serverSideEncryptionKeyID = "x-oss-server-side-encryption-key-id"
    case callback = "x-oss-callback"
    case callbackVar = "x-oss-callback-var"
    case hashCRC64ecma = "x-oss-hash-crc64ecma"
    case forbidOverwrite = "x-oss-forbid-overwrite"
    case copySource = "x-oss-copy-source"
    case copySourceRange = "x-oss-copy-source-range"
    case copySourceIfMatch = "x-oss-copy-source-if-match"
    case copySourceIfNoneMatch = "x-oss-copy-source-if-none-match"
    case copySourceIfUnmodifiedSince = "x-oss-copy-source-if-unmodified-since"
    case copySourceIfModifiedSince = "x-oss-copy-source-if-modified-since"
    case metadataDirective = "x-oss-metadata-directive"
    case nextAppendPosition = "x-oss-next-append-position"
    case resourceGroupId = "x-oss-resource-group-id"
    case versionId = "x-oss-version-id"
    case lastAccessTime = "x-oss-last-access-time"
    case completeAll = "x-oss-complete-all"
    case symlinkTarget = "x-oss-symlink-target"
    case tagging = "x-oss-tagging"
    case restorePriority = "x-oss-object-restore-priority"
    case contentSHA256 = "x-oss-content-sha256"
    case taggingDirective = "x-oss-tagging-directive"
    case ossDate = "x-oss-date"
    case ec = "x-oss-ec"
}

public let OSSPrefix = "x-oss-"
public let OSSUserMetaPrefix = "x-oss-meta-"
